免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: has-been
打印 上一主题 下一主题

请教一下,关于文本格式转换 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-10-17 23:00 |只看该作者

请教一下,关于文本格式转换

原帖由 "zhuzhzh" 发表:
awk -F, 'BEGIN{i=1}{while (i++<=NF) print $i}'  filename | uniq -c | awk 'print $2 $1'


我在windows下没法试,不过大体方法是对的吧

awk -F, 'BEGIN{i=1}{while (i++<=NF) print $i}'  filename | sort | uniq -c | awk 'print $2 $1'

论坛徽章:
0
12 [报告]
发表于 2005-10-17 23:00 |只看该作者

请教一下,关于文本格式转换


  1. awk -F"," 'BEGIN{j=1}{for(i=1;i<=NF;i++){a[j]++;j++}END{for(i=1;i<=j;i++){print  a[j],j}' file
复制代码

论坛徽章:
0
13 [报告]
发表于 2005-10-18 00:10 |只看该作者

请教一下,关于文本格式转换

Thanks for all your help! I tried to do it using the way from alun123456, it works! but with a samll bug! it seems that the first field can't be handled.

hasbeen@linux:~> cat junk.txt
A,B,C,D,E,F,G,AAAA,BBBB,CCCCC,DDDDDDDDD,D,A,A,B,F,F,AAAA,BBBB
hasbeen@linux:~> awk -F, 'BEGIN{i=1}{while (i++<=NF) print $i}' ./junk.txt | sort | uniq -c | awk '{print $1 $2}'
1
2A
2AAAA
2B
2BBBB
1C
1CCCCC
2D
1DDDDDDDDD
1E
3F
1G

论坛徽章:
0
14 [报告]
发表于 2005-10-18 00:16 |只看该作者

请教一下,关于文本格式转换

[quote]原帖由 "wmjie"]awk -F"," 'BEGIN{j=1}{for(i=1;i<=NF;i++){a[j]++;j++}END{for(i=1;i<=j;i++){print  a[j],j}' file[/quote 发表:


thanks, but it doesn't work.   would you help to try again?

论坛徽章:
0
15 [报告]
发表于 2005-10-18 00:35 |只看该作者

请教一下,关于文本格式转换

剛剛有點事,shell 可寫成的
[victor@localhost ~]$ cat junk.txt
A,B,C,C,E,F,G,AAAA,BBBB,CCCC,CCCC,DDDDDDDDD,aaaa,a,b,bbbb,ccc
[victor@localhost ~]$ cat temp.sh
#! /bin/bash
word=$(<junk.txt)
upper=`echo {A..Z}`
lower=`echo {a..z}`
for letter in $upper $lower
   do
    num=0
    i=${word//[!$letter]}
    howmany=${#i}
    if [ $howmany -ne 0 ] ; then
    echo ${i:0:1} $howmany
    fi
done




[victor@localhost ~]$ sh temp.sh
A 5
B 5
C 10
D 9
E 1
F 1
G 1
a 5
b 5
c 3
[victor@localhost ~]$

這樣成嗎?
用bash 3.0

论坛徽章:
0
16 [报告]
发表于 2005-10-18 00:42 |只看该作者

请教一下,关于文本格式转换

那個 num=0 可拆掉,寫錯了
#! /bin/bash
word=$(<junk.txt)
upper=`echo {A..Z}`
lower=`echo {a..z}`
for letter in $upper $lower
  do
   i=${word//[!$letter]}
   howmany=${#i}
   if [ $howmany -ne 0 ] ; then
   echo ${i:0:1} $howmany
   fi
done

论坛徽章:
0
17 [报告]
发表于 2005-10-18 00:45 |只看该作者

请教一下,关于文本格式转换

原帖由 "has-been" 发表:


thanks, but it doesn't work.   would you help to try again?

2.

  1. awk -F"," 'BEGIN{j=1}{for(i=1;i<=NF;i++){a[j]=$i;b[$i]++;j++}}END{for(i=1;i<=j;i++){print  a[i],b[a[i]]}}' file
复制代码


1.

  1. awk -F"," 'BEGIN{j=1}{for(i=1;i<=NF;i++){a[j]=$i;j++}}END{for(i=1;i<=j;i++){print a[i]}}' txt26
复制代码


这下好了,刚才的那个shell没有作测试,sorry。


[/code]

论坛徽章:
0
18 [报告]
发表于 2005-10-18 01:12 |只看该作者

请教一下,关于文本格式转换

我解釋一下這個 bash shell script
# 把 junk.txt 的內容放入變量 , word=$(<junk.txt) 等于 word=`cat junk.txt`
word=$(<junk.txt)
# {A..Z} 等于 A B C D E F G H . . .X Y Z
upper=`echo {A..Z}`

# 同上 ,但為小字母
lower=`echo {a..z}`

# 巡環歷遍 A..Z a..z
for letter in $upper $lower
do
# 變量 i 把 word 的內容去掉, 除了一個字母, 由 A開始 , 到 z 為止
  i=${word//[!$letter]}
  這個變量 howmany 返回 i 的長度
  howmany=${#i}
  # 如果長度不是 0 ,打印 字母和數目,因為 i 可能是 DDDDD
  # 我們不要重復的,于是用 ${varffset:length} 的方法,只要
  # 頭一個字, 等于 echo $i | cut -c1
  if [ $howmany -ne 0 ] ; then
  echo ${i:0:1} $howmany
  fi
done

全部 bash3.0 完成

论坛徽章:
0
19 [报告]
发表于 2005-10-18 18:21 |只看该作者

请教一下,关于文本格式转换

this time, it works correctly.

I took that from wmjie plus some idea from alun123456.
awk -F"," 'BEGIN{j=1}{for(i=1;i<=NF;i++){a[j]=$i;j++}}END{for(i=1;i<=j;i++){print a}}' txt26


hasbeen@linux:~> cat junk.txtou
A,B,C,D,E,F,G,AAAA,BBBB,CCCCC,DDDDDDDDD,D,A,A,B,F,F,AAAA,BBBB
hasbeen@linux:~> awk -F"," 'BEGIN{j=1}{for(i=1;i<=NF;i++){a[j]=$i;j++}}END{for(i=1;i<=j;i++){print a}}' ./junk.txt | sort | uniq -c
      1
      3 A
      2 AAAA
      2 B
      2 BBBB
      1 C
      1 CCCCC
      2 D
      1 DDDDDDDDD
      1 E
      3 F
      1 G



  

论坛徽章:
0
20 [报告]
发表于 2005-10-18 18:40 |只看该作者

请教一下,关于文本格式转换

原帖由 "twf_cc" 发表:
那?? num=0 可拆掉,???了
#!/bin/bash
word=$(<junk.txt)
upper=`echo {A..Z}`
lower=`echo {a..z}`
for letter in $upper $lower
  do
   i=${word//[!$letter]}
   howmany=${#i}
   if [ $howmany -ne 0 ] ; then
   echo ${i:0:1} $howmany
   fi
done


thanks, but what I want is counting the fields but not letter.

hasbeen@linux:~> cat junk.txt
A,B,C,D,E,F,G,AAAA,BBBB,CCCCC,DDDDDDDDD,D,A,A,B,F,F,AAAA,BBBB
hasbeen@linux:~> cat temp2.sh
#!/bin/bash
word=$(<junk.txt)
upper=`echo {A..Z}`
lower=`echo {a..z}`
for letter in $upper $lower
  do
   i=${word//[!$letter]}
   howmany=${#i}
   if [ $howmany -ne 0 ] ; then
   echo ${i:0:1} $howmany
   fi
done
hasbeen@linux:~> cat temp2.sh
#!/bin/bash
word=$(<junk.txt)
upper=`echo {A..Z}`
lower=`echo {a..z}`
for letter in $upper $lower
  do
   i=${word//[!$letter]}
   howmany=${#i}
   if [ $howmany -ne 0 ] ; then
   echo ${i:0:1} $howmany
   fi
done
hasbeen@linux:~> ./temp2.sh
A 11
B 10
C 6
D 11
E 1
F 3
G 1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP