![根据条件将记录复制到另一个文件中](https://linux22.com/image/3433/%E6%A0%B9%E6%8D%AE%E6%9D%A1%E4%BB%B6%E5%B0%86%E8%AE%B0%E5%BD%95%E5%A4%8D%E5%88%B6%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD.png)
我有一个包含多条记录的文件。我必须将那些在特定位置(例如位置 19 和 20)具有代码“06”的记录复制到另一个文件中。记录之间没有任何空格。如何使用 shell 脚本实现此目的?
答案1
如果“位置 19 和 20”指的是该行的字符 19 和 20 等于“06”,则可以通过多种方式执行此操作:
使用grep
:
grep -E '^.{18}06' your_file > new_file
这会查找行首之后有 18 个字符的行,后跟两个字符06
。
使用Bash:
while IFS= read -r line; do
code="${line:18:2}"
[ "$code" == 06 ] && printf "%s\n" "$line"
done < your_file > new_file
与上面类似,但在 Perl 中:
perl -ne 'print if substr($_,18,2) eq "06"' your_file > new_file
在 Bash 和 Perl 中,字符串的第一个位置都是位置 0,因此在此方案中字符 19 和 20 位于位置 18 和 19(从位置 18 开始读取 2 个字符)。