Awk不会替换所有列

时间:2016-08-18 23:22:38

标签: bash awk multiple-columns

我正在尝试使用awk like this替换文件的某个列。我可以使用

替换第3列中的“r”
awk '{ sub(/r$/, "Q", $3) }1' temp2.txt 

或第6列中的“4”使用

awk '{ sub(/4$/, "Q", $6) }1' temp2.txt

但是,我不能在第4栏中的“T”上进行替换。

该文件的内容为

cat temp2.txt

224245  CO2_Cells_50_V_-100_P_760   r  2016-08-18T13:35:12.337  long@d6copt025.crc.nd.edu   4
224256  CO2_Cells_100_V_-200_P_760  r  2016-08-18T13:35:15.408  long@d6copt039.crc.nd.edu   4
224261  CO2_Cells_100_V_-250_P_760  r  2016-08-18T13:35:16.425  long@d6copt012.crc.nd.edu   4
224262  CO2_Cells_150_V_-250_P_760  r  2016-08-18T13:35:16.426  long@d6copt075.crc.nd.edu   4
224264  CO2_Cells_250_V_-250_P_760  r  2016-08-18T13:35:17.438  long@d6copt142.crc.nd.edu   4
224266  CO2_Cells_100_V_-300_P_760  r  2016-08-18T13:35:17.440  long@d6copt145.crc.nd.edu   4
224267  CO2_Cells_150_V_-300_P_760  r  2016-08-18T13:35:17.442  long@d6copt149.crc.nd.edu   4
224268  CO2_Cells_200_V_-300_P_760  r  2016-08-18T13:35:17.443  long@d6copt143.crc.nd.edu   4
224269  CO2_Cells_250_V_-300_P_760  r  2016-08-18T13:35:18.460  long@d6copt128.crc.nd.edu   4
224271  CO2_Cells_100_V_-350_P_760  r  2016-08-18T13:35:18.463  long@d6copt136.crc.nd.edu   4
224272  CO2_Cells_150_V_-350_P_760  r  2016-08-18T13:35:18.464  long@d6copt207.crc.nd.edu   4
224273  CO2_Cells_200_V_-350_P_760  r  2016-08-18T13:35:18.466  long@d6copt201.crc.nd.edu   4
224274  CO2_Cells_250_V_-350_P_760  r  2016-08-18T13:35:19.539  long@d6copt226.crc.nd.edu   4
224277  CO2_Cells_150_V_-400_P_760  r  2016-08-18T13:35:19.543  long@d6copt250.crc.nd.edu   4
224278  CO2_Cells_200_V_-400_P_760  r  2016-08-18T13:35:19.545  long@d6copt212.crc.nd.edu   4
224279  CO2_Cells_250_V_-400_P_760  r  2016-08-18T13:35:20.649  long@d6copt184.crc.nd.edu   4
224282  CO2_Cells_150_V_-450_P_760  r  2016-08-18T13:35:20.653  long@d6copt074.crc.nd.edu   4
224283  CO2_Cells_200_V_-450_P_760  r  2016-08-18T13:35:20.654  long@q16copt062.crc.nd.edu  4
224287  CO2_Cells_150_V_-500_P_760  r  2016-08-18T13:35:21.718  long@d6copt030.crc.nd.edu   4
224288  CO2_Cells_200_V_-500_P_760  r  2016-08-18T13:35:21.720  long@q16copt063.crc.nd.edu  4
224289  CO2_Cells_250_V_-500_P_760  r  2016-08-18T13:35:21.721  long@q16copt063.crc.nd.edu  4
224522  CO2_Cells_250_V_-450_P_760  r  2016-08-18T14:54:09.720  long@d6copt030.crc.nd.edu   4
224699  CO2_Cells_50_V_-150_P_760   r  2016-08-18T18:04:18.900  long@q16copt062.crc.nd.edu  4

2 个答案:

答案 0 :(得分:3)

正则表达式中的$匹配字符串的结尾 - 即它只会替换列末尾的文本。 如果要在列中的任何位置替换文本,请使用sub(/T/, "Q", $4),但它只会替换第一个匹配的文本。

要替换列中的所有“T”,请使用gsub代替sub

答案 1 :(得分:1)

尝试:awk '{ sub(/[[T]/, "XYZ", $4) }1'

子第一个参数/[[T]/可以包含任何需要替换的字符 - 对于您的情况,然后是T