我正在尝试找到一种方法,用命令的输出快速有效地替换文件中每一行的列值。我需要每天处理大约 500,000 行的多个文件,所以我正在寻找可以尽快完成任务的东西。
我需要将逗号分隔行的第八列作为输入,运行命令,然后用命令的输出替换该列。
这是我已经尝试过的,虽然它有效,但速度非常慢:
awk -F "," 'NR > 1 {
cmd = "cdrtoip " $8
cmd | getline ip
close(cmd)
$8=ip
print
}' $1.csv >> $1.csv.tmp
Run Code Online (Sandbox Code Playgroud)
我更愿意坚持使用 Bash 或其他可以在 Linux 服务器上预安装的 Linux 程序。
编辑:抱歉,我应该包括 cdrtoip 是什么。
# Convert CISCO format (signed integer) to Hex
# Capitalize or else conversion from hex to decimal doesn't work later
HEXIP=$(printf '%x\n' $1 | tr '[:lower:]' '[:upper:]')
# Negative numbers will get 8 'f' in front of them
# Trim that part …
Run Code Online (Sandbox Code Playgroud)