【问题标题】:Multiple text insertion in LinuxLinux 中的多个文本插入
【发布时间】:2017-03-31 11:43:33
【问题描述】:

有人可以帮我写一段命令,将一些文本插入到已经包含数据的给定文件的多个位置(给定的列和行)。例如:old_data 是一个包含:

A

我希望得到 new_data 将包含:

A 1

我读过一些关于 awk 和 sed 命令的文章,但我不相信自己理解如何将这些结合起来,以获得我想要的。

我想补充一下,我想将此命令用作脚本的一部分

for b in ./*/ ; do (cd "$b" && command); done

如果我们将 old_data 的内容想象为元素矩阵 {An*m} 其中 n 对应于该矩阵的行数,m 对应于该矩阵的列数,我希望使用矩阵进行操作我可以添加新元素。 A 在旧数据中的坐标为 (1,1)。因此,在 new_data 中,我希望将 1 分配给具有坐标 (1,3) 的矩阵元素。 如果我们比较 old_data 和 new_data 的内容,我们会看到 (1,2) 元素对应于空格(它是空的)。

【问题讨论】:

  • 该输出背后有逻辑吗?
  • @JamesBrown 我相信我不明白你的问题。我使用 A B C D 标记旧数据和数字标记新数据(文本或数字)。
  • @user406046 以及为什么1 出现在A 行之后,而其他数字与给定字母在同一行中?我们也从哪里得到这些数字?我们知道您是新来的(欢迎),但请阅读How to Askminimal reproducible example。 (还有help centertour):)
  • ... 现在(在您添加代码片段之后)甚至 less 清晰。你想访问你当前目录中的所有目录,并且想做一些commandcommand 应该做什么?上面的插入?在哪些文件中?
  • 请同时描述(1,2)中的内容。

标签: linux shell awk command text-editor


【解决方案1】:

我根本不清楚您要什么,但我怀疑您是说您想要一种将某些给定文本插入特定行和列的方法。也许:

$ cat input
A
B
C
D
$ row=2 column=2 text="This is some new data"
$ awk 'NR==row {$column = new_data " " $column}1' row=$row column=$column new_data="$text" input
A
B  This is some new data 
C
D

【讨论】:

  • 相信你理解正确。但是 old_data 是一些文件。我在上面的问题中写的一条命令是脚本的形式。所以这个脚本应该如下操作: script old_data > new_data
  • 所以重定向awk的输出:awk ... input > new_data(我使用了名为input而不是old_data的文件)
【解决方案2】:

bash 和 unix 工具代码有效:

# make the input files.
echo {A..D} | tr ' ' '\n' > abc ; echo {1..4} | tr ' ' '\n' > 123
# print as per previous OP spec
head -1q abc 123 ; paste abc 123 123 | tail -n +2

输出:

A
1
B   2   2
C   3   3
D   4   4

版本 #3,(使用逗号作为更明显的分隔符),根据最新的 OP 规范:

# for the `sed` code change the `2` to whatever column needs deleting. 
paste -d, abc 123 123 | sed 's/[^,]*//2'

输出:

A,,1
B,,2
C,,3
D,,4

同样,使用 tab 分隔符(视觉上不太明显):

paste abc 123 123 | sed 's/[^\t]*//2'
A       1
B       2
C       3
D       4

【讨论】:

  • 谢谢,我会努力实现的。抱歉更改帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
相关资源
最近更新 更多