我有两个文件。第一个只是一个数字。这个数字每次都会被计算和改变。第二个文件有一堆列,我不知道行数(可以更改)。例如,我有这样的事情:
文件一:
12
文件2:
1 2 3
4 5 6
7 8 9
我想
1 2 3 12
4 5 6 12
7 8 9 12
我的想法是你可以做while not EOF
thencat File 1
和File 2
。我怎样才能这样做呢?
答案1
其他awk
:
$ awk 'BEGIN{getline l <"file1"};{print $0, l}' file2
1 2 3 12
4 5 6 12
7 8 9 12
BEGIN
在读取输入文件之前首先执行块。第一行file1
是使用getline()
函数检索,存储在变量中l
- 对于 的每一行
file2
,我们将其内容$0
与 一起打印l
,并用 分隔OFS
,默认情况下是一个空格。
答案2
使用 awk
$ awk -v n=$(cat file1) '{print $0,n}' file2
1 2 3 12
4 5 6 12
7 8 9 12
在csh
/上tcsh
,尝试:
awk -v n=`cat file1` '{print $0,n}' file2
怎么运行的
-v n=$(cat file1)
这会将 的内容分配
file1
给 awk 变量n
。print $0,n
这将打印后面跟着 的每一行
n
。
使用 sed
$ sed '1{h;d}; G;s/\n/ /' file1 file2
1 2 3 12
4 5 6 12
7 8 9 12
怎么运行的
1{h;d}
读取的第一行保存在保留空间中,然后从该模式空间中删除(因此不会打印)。
G; s/\n/ /
对于所有后续行,我们使用 get 命令
G
。这会在模式空间中附加一个换行符和保留空间。然后我们用空格替换换行符。
答案3
这应该可以工作(在这种情况下 file2 会被更新,如果您不希望这样,请删除 -i 标志)
sed -i "s/.*/& $(cat file1)/" file2
答案4
为了sed
恋人来说——阅读文件1对于每一行文件2这不是个好主意。使用变量更好:
my_var=$(<file1) ; sed "s/$/ $my_var/" file2
或更安全
read -r my_var <file1 ; sed "s/$/ $my_var/" file2