Unix 水平合并两个文件并格式化
我有两个文件如下:Unix 水平合并两个文件并格式化,unix,paste,Unix,Paste,我有两个文件如下: Austin Texas Los Angeles California York New York San Ramon California 文件1 Austin Los Angeles York San Ramon 文件2 Texas California New York California 我希望按如下方式水平合并它们: Austin Texas Los Angeles California York
Austin Texas
Los Angeles California
York New York
San Ramon California
文件1
Austin
Los Angeles
York
San Ramon
文件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
的工作原理是正确的,但是有人能给我指出正确的方向来正确设置格式吗
谢谢。首先,您必须检查最长行中的字符数。然后,您可以使用fmt将第一个文件中的行填充到更长的长度。使用粘贴完成此操作。粘贴在“合并”文件时使用一个选项卡,因此您可能需要对文件进行后期处理并删除带有空格的选项卡:
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
如果您对字段宽度有想法,可以执行以下操作:
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
或者使用bsdmainutils
中的列
工具:
paste file_1 file_2 | column -s $'\t' -t
首先,我从两个文件中删除了所有选项卡。然后,在第一个文件中,我在所有行的末尾添加了25个空格。我在这个文件上做了一个
粘贴
,效果非常好。例如,使用awk:paste a b | awk'{printf(“%-20s%s\n”,$1,$2)}