【问题标题】:Awk will not replace in all columnsawk 不会在所有列中替换
【发布时间】:2016-08-18 23:22:38
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: bash awk multiple-columns


    【解决方案1】:

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

    要替换列中的所有 'T',请使用 gsub 而不是 sub

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • /[[T]//T/ 相比没有任何好处。
      • 同意,这只是一个例子,以防需要替换多个字符。
      猜你喜欢
      • 1970-01-01
      • 2020-08-21
      • 2021-07-16
      • 2022-07-03
      • 2015-01-07
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多