我有以下类型的文件(file_1):
4.96798703303702 "YPL223C"
3.5545141639441 "YPL281C"
4.50082973953956 "YML042W"
5.43613972089831 "YMR107W"
4.81971559885503 "YBR072W"
4.31478270112112 "YDL204W"
3.66402710414498 "YBR117C"
5.79159144125629 "YMR175W"
3.02190667031174 "YMR250W"
我想在file_2上找到通讯员:
YPL223C
YBR117C
YPL223C
YBR117C
YMR175W
YMR175W
然后,我想将值从file_1的第一列复制到file_2上新创建的第二列,如下所示:
4.96798703303702 "YPL223C"
3.66402710414498 "YBR117C"
4.96798703303702 "YPL223C"
3.66402710414498 "YBR117C"
5.79159144125629 "YMR175W"
5.79159144125629 "YMR175W"
我尝试使用grep -F -f file_2 file_1
,但这没有考虑重复,只打印了:
4.96798703303702 "YPL223C"
3.66402710414498 "YBR117C"
5.79159144125629 "YMR175W"
有没有办法打印重复内容?
使用shell脚本:
#!/bin/sh
file1=./file_1
file2=./file_2
while read -r n; do
v=$(awk -v n="$n" '$2 ~ n {print $1}' "$file1")
printf '%s "%s"\n' "$v" "$n"
done <"$file2"
注意:这会将所有输出打印到stdout。
这将读取每行file_2
并将其值设置为n
。然后,它将读取file_1
并查找第n
2列中存在值的行,并打印第1列,并将其设置为变量v
。然后将以所需的格式打印n
并v
可以根据需要重定向。
要创建文件:
#!/bin/sh
file1=./file_1
file2=./file_2
while read -r n; do
v=$(awk -v n="$n" '$2 ~ n {print $1}' "$file1")
printf '%s "%s"\n' "$v" "$n"
done <"$file2" > file_3
但是,由于要向其中添加这些值,因此file_2
可以简单地用覆盖file_2
,file_3
但是我建议在此之前运行以上操作,以确保产生正确的结果。此外,它不会伤害都备份file_1
并file_2
在进行任何更改之前。
#!/bin/sh
file1=./file_1
file2=./file_2
while read -r n; do
v=$(awk -v n="$n" '$2 ~ n {print $1}' "$file1")
printf '%s "%s"\n' "$v" "$n"
done <"$file2" > file_3
mv file_3 "$file2"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句