テーブル内の特定のアイテムのフォルダを作成する

テーブル内の特定のアイテムのフォルダを作成する

次のように、テーブル(テキストタブで区切られた)にデータを設定しました。

NAME      TIME          ID        DATE 
--------
John        03:25:01    A10A      2015/05/12
Marry       01:01:15    N000M     2013/01/01
.
.
.
.

このテーブルの各名前のフォルダをどのように作成できますか?また、次のようにIDと時間でフォルダ名を指定するにはどうすればよいですか?

For John the created folder name is A10A-032501
For Marry the created folder name is N000M-010115

答え1

tail -n+3 file | while IFS=$'\t' read -r name time id date; do mkdir "$id-${time//:/}"; done

実行後、次のディレクトリが作成されます。

$ ls -d */
A10A-032501/  N000M-010115/

複数行バージョン

一部の人々はシェルコードを複数行に分割するのが好きです。

tail -n+3 file | while IFS=$'\t' read -r name time id date
do
    mkdir "$id-${time//:/}"
done

どのように動作しますか?

  • tail -n+3 file

    fileこれにより、2つのヘッダー行が削除され、標準出力に送信されます。

  • while IFS=$'\t' read -r name time id date; do

    これにより、行内でループが始まりますfileIFS=$'\t'4つの列を変数nametimeタブ文字を区切り文字としてid読み込みますdate

  • mkdir "$id-${time//:/}"

    これによりディレクトリが作成されます。 ${time//:/}時間フィールドからコロンを削除します。

  • done

    これはサイクルの終わりを示します。

答え2

データが「data.tsv」にあるとします。

sed -e '1,2d' data.tsv | while read myN myT myI myD; do mkdir $myI-${myT//:/} ; done

説明:sedは、data.tsvファイルで「-e」式「d」を実行して「1,2」行を削除します。

あなたの例の値にはスペースが含まれていないため、IFSをオーバーライドしませんでした。

残りは標準のwhileループだけです。

関連情報