在Linux中插入多个文本

时间:2017-03-31 11:43:34

标签: linux shell awk command text-editor

有人可以帮我解决如何编写一段命令,该命令会在已包含数据的给定文件的多个位置(给定列和行)中插入一些文本。例如: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)元素对应于空格(它是空的)。

2 个答案:

答案 0 :(得分:0)

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

$ 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

答案 1 :(得分:0)

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