私のディレクトリには次の* .datファイルがあります。
$ cat holiday_us.dat
20210101 1 New Year's Day
20210102 2 Labor Day
20210103 1 Independence Day
私が望む出力:
20210101_New Year'sDay
20210102_LaborDay
20210103_IndependenceDay
私が試したコード:
for file in /home/path/holly*.dat
do
awk -f ' ' '{print $1,"_",print$2}' "$file"
done
}
次の結果が表示されます。
20210101
New
20210102
Labor
20210103
Independence
答え1
出力フィールドの区切り文字をOFS
null(空)文字列と$2
次に変更します_
。
$ awk -v OFS= '{ $2="_" }1' *.dat
20210101_NewYear'sDay
20210102_LaborDay
20210103_IndependenceDay
答え2
cat data | awk '{print $1"_"$3$4$5}'
これにより所望の結果が出力される。質問がある場合はお役に立てば幸いです。いつでもお問い合わせください。
またはこれを行うこともできます。
awk '{print $1"_"$3$4$5}' data.dat
for file in /path/to/file/holly*.dat; do awk '{print $1"_"$3$4$5}' $file; done
答え3
これはトリックを行う必要があります。
for file in /home/path/*.tmp ; do cat $file | awk '{print$1,"_",$3$4$5}' | sed 's/ //g' ; done
答え4
この awk 文は C スタイルの printf 文を使用します。ここに追加される利点は、出力形式をより柔軟に指定できることです。ここで、NF は awk によって設定された現在行のフィールド数です。
awk -F ' ' '{printf("%s_", $1); for (i=3; i<=NF;i++) printf("%s ", $i);print ""}'$ ファイル
出力例:
20210101_旧正月20210102_
労働
日20210103_独立記念日
実際、スペースはデフォルトの区切り文字なので、次のものを使用することもできます。
awk '{printf("%s_", $1); for (i=3; i<=NF;i++) printf("%s ", $i);print ""}'$ ファイル