繁体   English   中英

使用shell脚本编辑文本格式

[英]Edit text format with shell script

我正在尝试制作一个文本编辑脚本。 在这种情况下,我有一个名为text.csv的文本文件,其中包含:

first;48548a;48954a,48594B
second;58757a;5875b
third;58756a;58576b;5867d;56894d;45864a

我想让文字格式像这样:

first;48548a
first;48954a
first;48594B
second;58757a
second;5875b
third;58756a
third;58576b
third;5867d
third;56894d
third;45864a

我应该使用什么命令来实现这一目标?

我是用awk做的。

假设你的第一行应该有一个; 而不是,

$ awk -F\; '{for(n=2; n<=NF; n++) { printf("%s;%s\n",$1,$n); }}' input.txt

未经测试。

这是一个纯粹的bash解决方案,可以处理两者,并且;

while IFS=';,' read -a data; do 
   id="${data[0]}"
   data=("${data[@]:1}")
   for item in "${data[@]}"; do 
      printf '%s;%s\n' "$id" "$item" 
   done
done < input.txt

更新 - 基于chepner建议的备用打印方法:

while IFS=';,' read -a data; do 
   id="${data[0]}"
   data=("${data[@]:1}")
   printf "$id;%s\n" "${data[@]}" 
done < input.txt

awk -v FS=';' -v OFS=';' '{for (i = 2; i <= NF; ++i) { print $1, $i }}' awk -v FS=';' -v OFS=';' '{for (i = 2; i <= NF; ++i) { print $1, $i }}'说明:awk隐式将数据拆分为记录(默认情况下由换行符分隔,即行==记录),然后是通过给定的字段分隔符(用于输入字段分隔符的FS和用于输出分隔符的OFS )分成编号字段。 对于每个记录,此脚本将打印第一个字段(即记录名称)以及第i个字段,这正是您所需要的。

while IFS=';,' read -a data; do 
   id="${data[0]}"
   data=("${data[@]:1}")
   printf "$id;%s\n" "${data[@]}" 
done < input.txt

要么

awk -v FS=';' -v OFS=';' '{for (i = 2; i <= NF; ++i) { print $1, $i }}'

$ awk -F\; '{for(n=2; n<=NF; n++) { printf("%s;%s\n",$1,$n); }}' input.txt

感谢大家的建议,:d。 这真的给了我一个新的知识..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM