水平合并两个文件并格式化

时间:2012-08-03 11:50:21

标签: unix paste

我有两个文件如下:

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正在按预期工作,但有人可以指出我正确的方向来使格式正确。

感谢。

3 个答案:

答案 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