【问题标题】:how do i replace the first 100 characters of all lines in a file using awk如何使用 awk 替换文件中所有行的前 100 个字符
【发布时间】:2014-04-06 08:15:57
【问题描述】:

如何使用 awk 替换文件中所有行的前 100 个字符?此文件中没有字段分隔符。所有字段都是固定宽度。鉴于数据的变化,我无法使用搜索和替换。

【问题讨论】:

  • 没用。 -r 标志在我的版本中是非法的。 sed 's/.{46}/" "/' with855st

标签: replace awk nawk


【解决方案1】:

sed 怎么样?用 A 替换前 100 个字符:

$ sed -r 's/.{100}/A/' file

如果您对结果满意,请使用 -i 重写文件:

$ sed -ri 's/.{100}/A/' file

【讨论】:

  • 没用。 -r 标志在我的版本中是非法的。 sed 's/.{46}/" "/' with855st
  • 试试sed 's/.\{100\}/replacement text/'
  • 好的,这行得通。但我希望用相同数量的替换来替换字符——例如 100 个空格。我只需要使用我猜的替换文本就可以了
  • 最后我做了这组命令。他们为我工作。谢谢。 * sed 's/.\{178\}//' with855st > with855st2 * nawk '{ sub(/^/, " ... "); print }' with855st2 > with855st3 * cut -c46-47 with855st > with855st3a * nawk 'FNR==NR{a[++i]=$0;next} {print a[FNR] "\t" $0}' with855st3a with855st3 > with855st4 * nawk '{ sub(/^/, "0000000000 ");打印 }' with855st4 > with855st5
【解决方案2】:
awk '{print "replacing text..." substr($0,100)}'

【讨论】:

  • 试过了,没用。它基本上删除了整行,除了2个空白。 nawk '{print " " substr($11,46)}' with855st
  • 我认为您需要进一步调查您的文件格式。这是基本的 gawk/nawk 语法,您可以找到 here
  • @schwartzray,你为什么使用$11? @Sigismundo 使用了$0
  • 我使用了#11,因为我认为那是起始列。我真的希望用空格替换第 11 到 46 列。
【解决方案3】:

使用纯外壳。

#!/usr/bin/env bash

# read each line into shell variable REPLY
while read -r ; do
   echo "REPLACE text ... ${REPLY:100}"
done <file

说明

【讨论】:

  • +1:不知道REPLY 变量。虽然您不是在数组中读取。您正在阅读默认变量中的整行。没有?
  • 添加了更多关于 REPLY 的解释
  • 感谢@BMW 也感谢链接!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2017-01-10
相关资源
最近更新 更多