awk 打印以空格分隔的列

awk 打印以空格分隔的列

我的目录中有如下 *.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);打印“”}'$文件

相关内容