我已经尝试这样做几个小时了
我有一个包含此数据的文件,我们将其称为 data1:
test1,test2,test3
我想在该数据行的末尾添加一个计数和一个逗号。假设我正在计算 data1 的行数,即 1 行。
echo ", $(wc -l < data1 | bc)"
我希望我的输出是:
test1,test2,test3,1
我尝试过 echo、printf、一些 awk(我仍然不明白这么多)、cat。
答案1
用 awk
awk '{$0=$0","NR}1' data1
答案2
假设一个 POSIX 文件,echo "$(head -c-1 data1)","$(wc -l <data1)"
将输出你想要的内容。head
删除尾随换行符。
答案3
使用 sed 将数字附加到最后一行:
STRING=`echo "$(wc -l < data1 | bc)"` && sed -i '$s/^\(.*\)$/\1,'"$STRING"'/' data1
$ cat data1
test1,test2,test3,1
第一部分将行数保存到变量中STRING
,sed 获取最后一行并将变量,
的内容附加$STRING
到行尾。
答案4
该paste
命令用于添加列:
$ wc -l <data1 | paste -d, file -
test1,test2,test3, 1
这是字面上地你要求什么;的输出wc
被添加到文件行的末尾。的输出wc
在行的开头有空格,这就是为什么你会得到这里的间距。
要删除此空白:
$ wc -l <data1 | sed 's/^ *//' | paste -d, file -
test1,test2,test3,1
paste
此处使用的命令使其-d,
在旧列和新列之间插入逗号。该-
信号表明新列应从标准输入而不是文件中读取。标准输入来自wc -l
计算文件中的行数。
的变体sed
只是获取wc
输出并删除行开头的所有空格字符。
使用bash
进程替换:
paste -d, file <( wc -l <data1 | sed 's/^ *//' )
这里,过程替换 ,<( ... )
取代了-
。