我有一个包含10行的文件,其中包含以下内容: AAAA,BBB,132,a.g.n。
我想走路每一行,char by char并将数据放在" ,"在输出文件中得到满足。
if [ $# -eq 2 ] && [ -f $1 ]
then
echo "Read nr of fields to be saved or nr of commas."
read n
nrLines=$(wc -l < $1)
while $nrLines!="1" read -r line || [[ -n "$line" ]]; do
do
for (( i=1; i<=$n; ++i ))
do
while [ read -r -n1 temp ]
do
if [ temp != "," ]
then
echo $temp > $(result$i)
else
fi
done
paste -d"\n" $2 $(result$i)
done
nrLines=$($nrLines-1)
done
else
echo "File not found!"
fi
}
在参数$ 2中,我有一个空文件,我将在文件$ 1中存储数据,而不是使用&#34; ,&#34;并添加几条评论。
Example:
My input_file contains:
a.b.c.d,aabb,comp,dddd
My output_file is empty.
I call my script: ./script.sh input_file output_file
After execution the output_file contains:
First line info: a.b.c.d
Second line info: aabb
Third line info: comp
(yes, without the 4th line info)
答案 0 :(得分:0)
要从名为 file.txt 的文件中打印第2016行,您必须运行这样的命令 -
Allocator
MATCH (u:User) WHERE u.first_name =~'(?i).*first.*' RETURN u
UNION ALL u.last_name =~'(?i).*last.*' return u
UNION ALL u.first_name =~'(?i).*last.*' RETURN u
UNION ALL u.last_name =~'(?i).*first.*' return u
将打印第2行
sed -n '2016p' < file.txt
2011th line
sed -n '2p' < file.txt
第10行到第33行
sed -n '2011p' < file.txt
第1和第3行
依旧......
有关详情,请参阅 this tutorial 和this answer。
答案 1 :(得分:0)
[wspace@wspace sandbox]$ awk -F"," 'BEGIN{OFS="\n"}{for(i=1; i<=NF-1; i++){print "line Info: "$i}}' data.txt
line Info: a.b.c.d
line Info: aabb
line Info: comp
这个小片段可以忽略最后一个字段。
更新
#!/usr/bin/env bash
if [ ! -f "$1" -o $# -ne 2 ];then
echo "Usage: $(basename $0) input_file out_file"
exit 127
fi
input_file=$1
output_file=$2
: > $output_file
if [ "$(wc -l < $1)" -ne 0 ];then
while true
do
read -r -n1 char
if [ "$char" == "" ];then
break
elif [ $char != "," ];then
temp=$temp$char
else
echo "line info: $temp" >> $output_file
temp=""
fi
done < $input_file
else
echo "file $1 is empty"
fi
也许这就是你想要的
答案 2 :(得分:0)
在原生bash中,假设您使用以下内容替换script.sh
的内容,以下内容应该可以执行您想要的操作:
#!/bin/bash
IN_FILE=${1}
OUT_FILE=${2}
IFS=\,
while read line; do
set -- ${line}
for ((i=1; i<=${#}; i++)); do
((${i}==4)) && continue
((n+=1))
printf '%s\n' "Line ${n} info: ${!i}"
done
done < ${IN_FILE} > ${OUT_FILE}
这不会打印输入文件中每行的第4个字段,在输出文件的新行上(我认为这是你的评论要求吗?)。
答案 3 :(得分:0)
试试这个(用你的样本线测试):
#!/bin/bash
# script.sh
echo "Number of fields to save ?"
read nf
while IFS=$',' read -r -a arr; do
newarr=${arr[@]:0:${nf}}
done < "$1"
for i in ${newarr[@]};do
printf "%s\n" $i
done > "$2"
执行脚本:
$ ./script.sh inputfile outputfile
Number of fields ?
3
$ cat outputfile
a.b.c.d
aabb
comp
用逗号分隔的所有单词都存储在数组$arr
tmp数组$newarr
删除最后$n
个元素($n
获取read
命令。)
它遍历新数组并将结果打印在输出文件$2
中。
答案 4 :(得分:0)
你试过吗
perf list
我假设只有最后一个单词右边没有逗号。
答案 5 :(得分:0)
只需使用bash,您就可以使用参数扩展和子串清除非常简单地执行您想要的操作。例如,采用示例文件:
$ cat dat/10lines.txt
aaaa,bbb,132,a.g.n.
aaaa,bbb,133,a.g.n.
aaaa,bbb,134,a.g.n.
aaaa,bbb,135,a.g.n.
aaaa,bbb,136,a.g.n.
aaaa,bbb,137,a.g.n.
aaaa,bbb,138,a.g.n.
aaaa,bbb,139,a.g.n.
aaaa,bbb,140,a.g.n.
aaaa,bbb,141,a.g.n.
使用本机bash字符串处理的简单单行可以简单地如下,并给出以下结果:
$ while read -r line; do echo ${line%,*}; done <dat/10lines.txt
aaaa,bbb,132
aaaa,bbb,133
aaaa,bbb,134
aaaa,bbb,135
aaaa,bbb,136
aaaa,bbb,137
aaaa,bbb,138
aaaa,bbb,139
aaaa,bbb,140
aaaa,bbb,141
Paremeter扩展w /子串移除的工作原理如下:
var=aaaa,bbb,132,a.g.n.
从左侧开始,向上移除并包括第一个','
:
${var#*,} # bbb,132,a.g.n.
从左侧开始,删除最后一个','
,包括最后一个${var##*,} # a.g.n.
:
','
从右边开始,删除第一个${var%,*} # aaaa,bbb,132
并包括第一个','
:
${var%%,*} # aaaa
从左侧开始,删除最后一个'*'
,包括最后一个,a.g.n
:
136
注意:上面要删除的文本用通配符${var%,136*},136 # aaaa,bbb,136 (all others unchanged)
表示,但不需要使用通配符。它可以是任何允许的文本。例如,要仅删除前面的数字为// Save image to disk
NSString *documentaryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/Image.png",documentaryPath];
NSData *data = [NSData dataWithData:UIImagePNGRepresentation(YOUR_IMAGE)];
[data writeToFile:filePath atomically:YES];
// Retrieve the Image
- (NSData *) imageData {
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *pngFilePath = [NSString stringWithFormat:@"%@/Image.png",docDir];
NSData *dataImage = [NSData dataWithContentsOfFile:pngFilePath];
return dataImage;
}
的{{1}},您可以执行以下操作:
UIImage *image = [UIImage imageWithData:imageData]