bash - 在特定位置插入字符串(定长文件)

标签 bash unix awk sed ksh

我试图在固定长度文件的每一行中的 80 位置插入一个字符串“abcd”。

输入文件

1212121212121212121213231232345    00000003088 234235235321      MISS WAN
1212121212121212121213231232345    00000003088 324556346366      MISS NISCH
1212121212121212121213231232345    00000003088 547478657588      MISS RACHEL
1212121212121212121213231232345    00000009781 313156475788      MR & MRS ROCK

每条记录的长度

awk '{print length}' temp.txt
74
76
77
79

我无法在 80 处插入数据,我已经尝试了以下命令

sed "s/.\{80\}/&abcd/" test.txt
awk -vFS="" -vOFS="" '{$80=$80"abcd"}1' test.txt

我想我应该先增加记录的长度,然后我才能使用上面的命令。
插入空格

sed -e "s/.\{75\}/&              /g" test.txt
sed 's/$/        /" test.txt

循环内

while read line
do
printf "$line        " >>temp.txt
done <test.txt

大多数情况下,上面的空格会被下一行修改,并且丢失了一些内容,如下所示。

4044046160710301740053062257440    00000003088 850052246976      MISS WAN
    046160710301740053062257440    00000003088 850052246976      MISS NISCH
    046160710301740053062257440    00000003088 850052246976      MISS RACHEL
2011888360797600140053062257440    00000009781 851011576287      MR & MRS ROCK

预期答案:

4044046160710301740053062257440    00000003088 850052246976      MISS WAN       abcd
4044046160710301740053062257440    00000003088 850052246976      MISS NISCH     abcd
4044046160710301740053062257440    00000003088 850052246976      MISS RACHEL    abcd
2011888360797600140053062257440    00000009781 851011576287      MR & MRS ROCK  abcd

任何关于正确答案的指南将不胜感激。

最佳答案

一个更简单的 awk

$ awk '{printf "%-80s%s\n",$0,"abcd"}' file

1212121212121212121213231232345    00000003088 234235235321      MISS WAN       abcd
1212121212121212121213231232345    00000003088 324556346366      MISS NISCH     abcd
1212121212121212121213231232345    00000003088 547478657588      MISS RACHEL    abcd
1212121212121212121213231232345    00000009781 313156475788      MR & MRS ROCK  abcd

关于bash - 在特定位置插入字符串(定长文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58012990/

相关文章:

Bash:保存并打印数组中的参数

perl - 使用awk或cut或perl选择特定的列

python - 通过 Python Popen 运行长时间运行的进程

node.js - AWK 命令在 Nodejs 内失败

windows - 在 bash 脚本结束时保持终端打开

linux - 验证输入的最后 4 个字符的 Bash 脚本

c - 解析字符串(Unix Shell)

linux - 附加到特定行的末尾

linux - 如何用文件每一行中的字母替换某些数字(根据该行第 5 列和第 6 列中存在的字母)?

bash - 在 Bash 中将目录的别名定义为 cd 的参数