小编Bin*_*Bin的帖子

如何使用awk将文件列中的子字符串替换为另一个文件中的字符串?

我有两个文件,并且想要使用awk将文件一列中的subtring替换为另一文件中的字符串

f1:
1a1 aaa 777
3_3 ccc 6b6
3.3 ddd 666

f2:
b5g9aaa8y
5_6ccc9.

output:
1a1 b5g9aaa8y 777
3_3 5_6ccc9. 6b6
Run Code Online (Sandbox Code Playgroud)

我想我可以在两个步骤中做到这一点:

  1. 生成子字符串和字符串的交集字典文件
  2. 使用awk(sub)完成它

但是,是否有一行awk命令来检查子字符串是否在字符串中,然后进行替换?

抱歉,我应该更清楚地解释它。

  1. file2中的字符串格式和长度不固定。
  2. file1和file2没有相同数量的记录。file2是file1的子集,只需要在file2中输出字符串
  3. 假设没有多个匹配

awk

1
推荐指数
1
解决办法
63
查看次数

如果col2大于最后一行的col2,则打印

我想使用awk提取具有比最后一行更大的列值的行。

这样的样本数据

a 3
a 5
a 4
b 1
c 2
c 3
c 6
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令,但没有用

awk '{if(($1!=a) || ($1==a && $2>b)){getline; print}};{a=$1;b=$2}'
Run Code Online (Sandbox Code Playgroud)

预期的输出:

a 3
a 5
b 1
c 2
c 3
c 6
Run Code Online (Sandbox Code Playgroud)

仅应删除“ a 4”行,因为4小于最后一行(5)的第二列。

但是我的代码的实际结果是:

a 5
c 2
c 6
Run Code Online (Sandbox Code Playgroud)

我该如何解决?谢谢

awk

1
推荐指数
1
解决办法
65
查看次数

如果标准输入为空,如何打破管道?

如果标准输入为空,我想打破整个管道。我尝试结合 xargs -r 和 tee,这意味着如果 stdin 为空则不打印和写入,但它失败了

...| upstream commands | xargs -r tee output.txt | downstream commands | ...

任何反馈表示赞赏。

bash shell pipe xargs tee

1
推荐指数
1
解决办法
59
查看次数

标签 统计

awk ×2

bash ×1

pipe ×1

shell ×1

tee ×1

xargs ×1