寻找一个bourne shell程序,它接受一个文件作为位置参数,并回显文件中的值以单列输出。
文件包含: 艾克曼,特洛伊雷诺兹,伯特史密斯,约翰琼斯,科林
目前我有这个但没有工作
#!/bin/sh
if [ $# != 1 ]
then
echo usage: $0 FILE_NAME
exit 1
fi
cat $1
答案 0 :(得分:1)
我认为您的意思是要读取文件,删除所有换行符并用逗号替换它们。 如果是这种情况,这应该有效:
#!/bin/bash
if [ $# != 1 ]
then
echo usage: $0 FILE_NAME
exit 1
fi
sed ':a;N;$!ba;s/\n/,/g' $1
答案 1 :(得分:1)
使用awk
:
#!/bin/sh
if [ $# != 1 ]; then
echo "usage: $0 FILE_NAME"
exit 1
fi
awk -F, -v OFS='\n' '{$1=$1}1' "$1"
使用示例:
sh script.sh file
文件包含
aikman,troy reynolds,burt smith,john jones,colin
输出:
aikman
troy reynolds
burt smith
john jones
colin
答案 2 :(得分:0)
从文件
aikman,troy reynolds,burt smith,john jones,colin
的
grep -oP '\S+' filename
产生
aikman,troy
reynolds,burt
smith,john
jones,colin
和
grep -oP '\w+' filename
产生
aikman
troy
reynolds
burt
smith
john
jones
colin
和
grep -oP '[^,]+' filename
产生
aikman
troy reynolds
burt smith
john jones
colin
完整的脚本:
case $# in
1) grep -oP '[^,]+' "$1" ;;
*) echo "Usage: $0 filename";exit 1 ;;
esac
更好(接受许多文件名)
for file
do
grep -oP '\S+' "$file"
done
答案 3 :(得分:0)
如果您希望每个空格分隔的值在一个单独的行上,
tr ' ' '\n' <file
会这样做。
并非tr
的所有方言都将符号\n
理解为换行符;试试\012
或字面换行:
tr ' ' '
' <file
(是的,这是第二对单引号之间的字面换行符。)
更可持续的解决方案是将数据文件切换为每行一个名称,或者用一些不那么古怪的东西替换它。
答案 4 :(得分:0)
您可以使用Awk:
在单独的行上打印每个字段awk '{for(i=1;i<=NF;i++) print $i}' "$1"
输出:
aikman,troy
reynolds,burt
smith,john
jones,colin