我的目录中有如下 *.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);打印“”}'$文件
示例输出:
20210101_元旦
20210102_劳动节
20210103_独立日
事实上,由于空格是默认分隔符,因此您也可以使用:
awk '{printf("%s_", $1); for (i=3; i<=NF;i++) printf("%s ", $i);打印“”}'$文件