次のように、テーブル(テキストタブで区切られた)にデータを設定しました。
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
これにより、行内でループが始まります
file
。IFS=$'\t'
4つの列を変数name
とtime
タブ文字を区切り文字として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ループだけです。