我有记录
示例:
EMP_ID|EMP_NAME|AGE|SALARAy
123456|XXXXXXXXX|30|10000000
有没有一种方法可以将记录拆分为多个记录。示例输出应类似于
EMP_ID|Attributes
123456|XXXXXXX
123456|30
123456|10000000
我想将同一条记录分成多个记录。在这里,员工ID是我的唯一列,我想循环运行其余3列并创建3条记录。像EMP_ID | EMP_NAME,EMP_ID | AGE,EMP_ID | SALARY一样。我可能还会有更多列,但对于示例,我提供了3列以及Employee ID。
任何建议请帮助我。
答案 0 :(得分:0)
使用bash:
record='123456|XXXXXXXXX|30|10000000'
IFS='|' read -ra fields <<<"$record"
for ((i=1; i < "${#fields[@]}"; i++)); do
printf "%s|%s\n" "${fields[0]}" "${fields[i]}"
done
123456|XXXXXXXXX
123456|30
123456|10000000
对于整个文件:
{
IFS= read -r header
while IFS='|' read -ra fields; do
for ((i=1; i < "${#fields[@]}"; i++)); do
printf "%s|%s\n" "${fields[0]}" "${fields[i]}"
done
done
} < filename
答案 1 :(得分:-1)
具有由特殊定界符分隔的字段(例如|
)的行记录可以由基本的Unix命令行工具(例如awk
)操纵。例如,将您的输入记录保存在文件records.txt
中:
awk -F\| 'NR>1{for(i=2;i<=NF;i++){print $1"|"$(i)}}' records.txt
我建议阅读awk教程并试用它。值得学习的相关命令行工具包括grep
,sort
,wc
,uniq
,head
,tail
和cut
。如果您定期对定界符分隔的文件进行数据处理,则每天可能会需要它们。一旦您的数据结构格式变得更加复杂(例如CSV格式,并且还可能在字段值中使用定界符),您就需要更具体的工具,例如,参见this question on CSV tools或jq来处理JSON。仍然了解基本的Unix命令行工具将为您节省大量时间。