我是KSH脚本的新手,需要知道我在哪里犯了错误..我需要从abc.dat文件中打印字段1和字段2。
#!/bin/ksh
f="abc.dat"
l=`sed '1d;$d' $f|wc -l`
l1=2
while ( $l1 -lt $l )
do
echo 'First Field= '`sed -n "${l1}p" $f|cut -d"|" -f1` ', then second field= ' `sed -n "${l1}p" $f|cut -d"|" -f2`
(( l1++ ))
done
抱歉..我有一个包含以下数据的文件,
Allan|2000|5000
Smith|5000|3000
Roy|1000|3000
我需要使用KSH脚本编写以下输出,
first field=Allan, then 2nd field=2000
first field=Smith, then 2nd field=3000
依旧......
谢谢你 示例input.txtTest1|1|2|3|4|5|6|7
Test2|1|2|3|4|5|6|7
Test3|1|2|3|4|5|6|7
Sometext|b|c|d|e|f|g
Test5|1|2|3|4|5|6|7
Test6|1|2|3|4|5|6|7
输出:
First field=Test1, then 2nd field=Field: 1
First field=Test2, then 2nd field=Field: 2
First field=Test3, then 2nd field=Field: 3
First field=Sometext, then 2nd field=Field: e
First field=Test5, then 2nd field=Field: 5
First field=Test6, then 2nd field=Field: 6
答案 0 :(得分:1)
尝试以下方法:
awk -F'|' '{ printf "first field=%s, then 2nd field=%s\n", $1, $(NR+1) }' input.txt
awk
按|
(-F'|'
)将每个输入行拆分为字段。printf
然后使用每个输入行的第一个字段($1
)和 n -th字段($(NR+1)
)打印格式字符串,其中 n 计算为当前输入行(NR
)+ 1的编号。除了更简单之外,这个awk
解决方案通常比在 shell 代码中循环的解决方案执行得更好 - 最好避免shell代码中的循环,尤其是在调用外部实用程序时在每次迭代中。
答案 1 :(得分:0)
我会指出你在Awk:
cat data_file | awk -F\| '{print "First field" $1 ", then 2nd field =" $2}'
这会将Awk的字段分隔符设置为管道符号,并为您有效地分割行。 Awk绝对是一个了解一点的工具。老实说,人们尝试使用Sed的许多方式都更适合Awk。 :)
答案 2 :(得分:0)
当字段没有空格时,您可以使用cut作为解决方案:
$page_number = isset($_GET['page']) ? $_GET['page'] : 1;
$offset = 10 * ($page - 1);
$sql = "SELECT * FROM categories ORDER BY category_title ASC LIMIT $offset, 10";