如何使用 sed 或 awk 在每行的末尾附加文本(就地)?
How to append text at the end of each line (in-place) using sed or awk?
现有 table(sam.txt):
36419 36418
36418 36417
36417 36416
36416 36415
期望的输出:
36419 36418 1
36418 36417 2
36417 36416 3
36416 36415 3
我想附加 1,2,3,4 作为额外的列。我在 sed 命令下尝试过,但我无法循环行号 $NUMBER
as gives syntax error?
linecount=$(wc -l < sam.txt)
for (( NUMBER=1; NUMBER<=linecount; NUMBER++ ))
do
sed -i "$NUMBERs/.*/& $b/" sam.txt
done
更新: 删除了单元格之间的竖线,因为它会造成混淆。我保留了垂直条以呈现为 HTML table 但它没有按预期加载。
在 awk $0 中给出整行,您可以添加文本 needed.We 声明一个变量 a,我们在使用它之前递增它,这意味着它在第一行。然后我们打印整行 + aspace 变量 a
- 我们运行:
~/tests $ cat sam.txt | awk '{ ++a; print [=10=] " " a }'
输出
36419 36418 1
36418 36417 2
36417 36416 3
36416 36415 4
这是对原问题的回复。
而不是 运行多次 sed
,生成一个 sed 脚本并且 运行 只生成一次。
#! /bin/bash
lines=$(wc -l < "")
{
echo '1s/$/C/'
echo '2s/$/----/'
for ((n=3; n<=lines; ++n)) ; do
echo $n's/$/'$((n-2))/
done
echo 's/$/|/'
} | sed -f- ""
$ awk '{print [=10=], NR}' sam.txt
36419 36418 1
36418 36417 2
36417 36416 3
36416 36415 4
如果你想修改原始文件然后用 GNU awk:
awk -i inplace '{print [=11=], NR}' sam.txt
或使用任何 awk:
awk '{print [=12=], NR}' sam.txt > tmp && mv tmp sam.txt
最后一个脚本是 gawk、sed、perl、ruby 等在幕后所做的,none 其中确实进行“就地”编辑,它们都在内部使用临时文件文件。
现有 table(sam.txt):
36419 36418
36418 36417
36417 36416
36416 36415
期望的输出:
36419 36418 1
36418 36417 2
36417 36416 3
36416 36415 3
我想附加 1,2,3,4 作为额外的列。我在 sed 命令下尝试过,但我无法循环行号 $NUMBER
as gives syntax error?
linecount=$(wc -l < sam.txt)
for (( NUMBER=1; NUMBER<=linecount; NUMBER++ ))
do
sed -i "$NUMBERs/.*/& $b/" sam.txt
done
更新: 删除了单元格之间的竖线,因为它会造成混淆。我保留了垂直条以呈现为 HTML table 但它没有按预期加载。
在 awk $0 中给出整行,您可以添加文本 needed.We 声明一个变量 a,我们在使用它之前递增它,这意味着它在第一行。然后我们打印整行 + aspace 变量 a
- 我们运行:
~/tests $ cat sam.txt | awk '{ ++a; print [=10=] " " a }'
输出
36419 36418 1
36418 36417 2
36417 36416 3
36416 36415 4
这是对原问题的回复。
而不是 运行多次 sed
,生成一个 sed 脚本并且 运行 只生成一次。
#! /bin/bash
lines=$(wc -l < "")
{
echo '1s/$/C/'
echo '2s/$/----/'
for ((n=3; n<=lines; ++n)) ; do
echo $n's/$/'$((n-2))/
done
echo 's/$/|/'
} | sed -f- ""
$ awk '{print [=10=], NR}' sam.txt
36419 36418 1
36418 36417 2
36417 36416 3
36416 36415 4
如果你想修改原始文件然后用 GNU awk:
awk -i inplace '{print [=11=], NR}' sam.txt
或使用任何 awk:
awk '{print [=12=], NR}' sam.txt > tmp && mv tmp sam.txt
最后一个脚本是 gawk、sed、perl、ruby 等在幕后所做的,none 其中确实进行“就地”编辑,它们都在内部使用临时文件文件。