我有两个这样的示例文件:
$ cat file1
abc,sachin
cat,kumar
$ cat file2
xyz
pressure
$ cat file3
xyz,sachin
pressure, kumar
我希望将 的第一列file1
替换为file2
。
我尝试做这样的事情:
$ awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' file1 file2
我正在使用 Solaris 10,但它似乎不支持此功能。还有其他建议吗?
答案1
cut
使用and怎么样paste
?如果您的 shell 支持进程替换,那么
$ paste -d, file2.txt <(cut -d, -f2 file1.txt)
xyz,sachin
pressure,kumar
答案2
您需要指定输入字段分隔符。另外,我不知道你是如何选择领域的。在 awk 中,字段从 1 开始。两个输入文件中都没有 3 个字段。
以下内容应该适合您:
awk -F, 'FNR==NR{a[NR]=$1;next}{$1=a[FNR]}1' OFS=, file2.txt file1.txt
对于您的示例输入,它会生成:
xyz,sachin
pressure,kumar
答案3
您应该尝试使用 @devnull 的答案/usr/xpg4/bin/awk
或nawk
。
/usr/bin
下面和/bin
上面的许多程序Solaris
都不POSIX
兼容。
或者您可以用于perl
便携式:
$ perl -nle '
unless (/,/) {
push @a, $_;
next;
}
@l = split ",", $_;
print "$a[$i++],$l[1]";
' file2.txt file1.txt
xyz,sachin
pressure,kumar
甚至更短:
$ perl -F',' -anle '
if (@F == 1) {push @a,$_;next}
print "$a[$i++],$F[1]";
' file2.txt file1.txt