在下面的awk
中,我尝试cp
和paste
或将f2
中的每个匹配行更新为$3
中的f1
$2
中的f1
在f2
中的行中。在f1
和f2
中,总会有一个匹配项(通常大于1),并且我的实际数据要大得多(几百行)。将f2
中的行粘贴到$3
中的f1
时,$1
的{{1}}中的值将在行末尾附加一个f1
。 /test/id/$1_raw.file_fixed.txt
的值也来自$1
。除f1
中的值在第三个$1
之后之外,其余大部分为静态文本。以/
开头的行仅按原样打印,而不用于查找匹配项。 R_2019
确实执行,但是输出未更改。谢谢:)。
我也尝试了另一个awk
(尝试2),但没有成功。我可以看到awk
中的字符串已被读入f2
,但是我找不到$id
中的部分匹配项。谢谢:)。
f1
f1
f2
xyxy_0268 0000-yyyy
xyxy_0270 1111-xxxx
R_0000_00_02_00_45_32_xxxx_x0-0000-100-x0.0_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
所需
/path/to/the/xxx/data/0000-yyyy_v1_0000-yyyy_RNA_v1/190326-Control_v1_20190328071906449
/path/to/the/xxx/data/00-0000_xxxx-03_v1/00-0000_xxxx-03_v1_20190322115521953
/path/to/the/xxx/data/1111-xxxx-03_v1/1111-xxxx-03_v1_20190322115521953
awk
xyxy_0268 0000-yyyy /path/to/the/xxx/data/0000-yyyy_v1_0000-yyyy_RNA_v1/190326-Control_v1_20190328071906449/test/id/xyxy_0268_raw.file_fixed.txt
xyxy_0270 1111-xxxx /path/to/the/xxx/data/1111-xxxx-03_v1/1111-xxxx-03_v1_20190322115521953/test/id/xyxy_0270_raw.file_fixed.txt
R_0000_00_02_00_45_32_xxxx_x0-0000-100-x0.0_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
答案 0 :(得分:3)
$2 in id
不能满足您的期望,您需要使用index
循环检查数组中的每个键。
$ awk 'NR==FNR{a[$0];next} NF>1{for(b in a){if(index(b,$2)){$3=b;delete a[b]}}} 1' f2 f1
xyxy_0268 0000-yyyy /path/to/the/xxx/data/0000-yyyy_v1_0000-yyyy_RNA_v1/190326-Control_v1_20190328071906449
xyxy_0270 1111-xxxx /path/to/the/xxx/data/1111-xxxx-03_v1/1111-xxxx-03_v1_20190322115521953
R_0000_00_02_00_45_32_xxxx_x0-0000-100-x0.0_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
答案 1 :(得分:2)
请您尝试以下操作(此代码仅根据示例显示)。
awk 'FNR==NR{a[$0];next} {flag="";for(i in a){match(i,$2);if(substr(i,RSTART,RLENGTH)){flag=1;print $0,i}}} !flag' Input_file2 Input_file1