Bash 如何缩短长列表的名称
你好 我想知道如何缩短一长串不同名字的列表,使之可读 列表:(假设有所有不同的) 我想得到:Bash 如何缩短长列表的名称,bash,shell,Bash,Shell,你好 我想知道如何缩短一长串不同名字的列表,使之可读 列表:(假设有所有不同的) 我想得到: simon, g. simon, g. simon, g. simon, g. simon, g. simon, g. simon, g. 提前感谢您提供的任何线索。下面的awk一行将打印出第一列,后面是第二列的第一个字母和一个句点 awk 'BEGIN{FS=OFS=", "} {print $1, substr($2, 1, 1)"."}' input.csv 如果需要,可以使用标准重定向将其
simon, g.
simon, g.
simon, g.
simon, g.
simon, g.
simon, g.
simon, g.
提前感谢您提供的任何线索。下面的
awk
一行将打印出第一列,后面是第二列的第一个字母和一个句点
awk 'BEGIN{FS=OFS=", "} {print $1, substr($2, 1, 1)"."}' input.csv
如果需要,可以使用标准重定向将其重定向到文件
awk 'BEGIN{FS=OFS=", "} {print $1, substr($2, 1, 1)"."}' input.csv > output.csv
如果您想要纯
bash
解决方案:
while read firstPlusComma last; do
echo "$firstPlusComma ${last:0:1}."
done < file
读取第一个pluscomma最后一个;做
回显“$firstPlusComma${last:0:1}”
完成<文件
使用awk
:
$ awk '{$2=substr($2,1,1)"."}1' file
simon, g.
simon, g.
simon, g.
simon, g.
simon, g.
simon, g.
simon, g.
- 使用
substr
函数将第二个字段修改为第一个字符。根据输出的需要在末尾追加
李>
- 使用
1
打印该行李>
用perl试试:
perl -lne 'print $1."\." if(/(.*, .).*/)'
使用sed和反向引用
sed -r -e "s/^([^,]+), ([a-zA-Z]).*/\1, \2./g" < <file containing list>
sed-r-e“s/^([^,]+),([a-zA-Z])./\1,2./g”<
+1击败了我。这可能是完成任务的最好方法。@JS웃 谢谢但是,从性能角度来看,我确信您的awk
解决方案要快得多;请注意,字符串位置在awk
中以1开头(不过,您的解决方案仍然有效)。谢谢@mklement0的精彩捕捉。固定的。根据手册如果start小于1,substr()将其视为1。(POSIX没有指定在这种情况下要做什么:Brian Kernighan的awk就是这样做的,因此gawk也这样做。)
,可能这就是它工作的原因:)
您还可以建议使用perl-pe的/().*/$1./'文件
sed -r -e "s/^([^,]+), ([a-zA-Z]).*/\1, \2./g" < <file containing list>