我有两个文件如下:
File_1
Austin
Los Angeles
York
San Ramon
File_2
Texas
California
New York
California
我想将它们水平合并,如下所示:
Austin Texas
Los Angeles California
York New York
San Ramon California
我可以使用paste
命令进行水平合并,但格式化会变得混乱。
Austin Texas
Los Angeles California
York New York
San Ramon California
我意识到paste
正在按预期工作,但有人可以指出我正确的方向来使格式正确。
感谢。
答案 0 :(得分:4)
粘贴在“合并”文件时使用选项卡,因此您可能需要对文件进行后处理并删除带有空格的选项卡:
paste File_1 File_2 | awk 'BEGIN { FS = "\t" } ; {printf("%-20s%s\n",$1,$2) }'
结果:
Austin Texas
Los Angeles California
York New York
San Ramon California
答案 1 :(得分:1)
首先,您必须检查最长行中的字符数。您可以使用fmt从第一个文件填充行到更大的长度。使用粘贴完成它。
答案 2 :(得分:1)
如果您对字段宽度有所了解,可以执行以下操作:
IFS_BAK="$IFS"
IFS=$'\t'
paste file_1 file_2 \
| while read city state; do
printf "%-15s %-15s\n" "$city" "$state"
done
IFS="$IFS_BAK"
或者这个较短的版本:
paste file_1 file_2 | while IFS=$'\t' read city state; do
printf "%-15s %-15s\n" "$city" "$state"
done
或使用column
中的bsdmainutils
工具:
paste file_1 file_2 | column -s $'\t' -t