讓我們先從最近我遇到了一個例子:什麼工具處理柱狀數據中的空間?
C:\>net user
User accounts for \\SOMESYSTEM
-------------------------------------------------------------------------------
ASPNET user1 AnotherUser123
Guest IUSR_SOMESYSTEM IWAM_SOMESYSTEM
SUPPORT_12345678 test userrrrrrrrrrrr test_userrrrrrrrrrrr
The command completed successfully.
在第三行,第二列有與空間的登錄。這導致許多基於空白區分字段的工具將該字段視爲兩個字段。
如何處理使用今天的工具以這種方式格式化的數據?
這裏是上,我想在其他現代的跨平臺文字處理工具集已經複製命令提示符純** Windows批處理語言的例子:
C:\>cmd /v:on
Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.
C:\>echo off
for /f "skip=4 tokens=*" %g in ('net user ^| findstr /v /c:"The command completed successfully."') do (
More? set record=%g
More? echo !record:~0,20!
More? echo !record:~25,20!
More? echo !record:~50,20!
More?)
ASPNET
user1
AnotherUser123
Guest
IUSR_SOMESYSTEM
IWAM_SOMESYSTEM
SUPPORT_12345678
test userrrrrrrrrrrr
test_userrrrrrrrrrrr
echo on
C:\>
**使用可變延遲擴展(cmd/v:on或setlocal enabledelayedex擴展在一個批處理文件中),for/f命令輸出解析器和可變子串語法...除了在美妙的網站http://ss64.com/nt/syntax.html
AWK,我沒有看到處理'userrrrrrrrrrr'的方法r'登錄字段,而不使用substr()方法與上面的變量子字符串語法類似。是否有另一種語言使文本變得簡單並且不像sed那樣只寫文本?
「最佳」每次都會讓你陷入麻煩,因爲這是一個意見問題。我會使用我知道的工具,或者我想學習的工具。 – dmckee
是的,「分欄」數據中的空格是一個問題。 'net user'是否允許任何選項爲每個用戶輸出1行?然後使用awk是一塊蛋糕。您是否嘗試過將輸出管道輸出爲awk,可能是autoformatting,因爲它'知道'它將進入屏幕。 'net user | awk'{print $ 0}''將是測試該理論的方式。祝你好運。 – shellter
@shellter不幸的是,網絡用戶並不那麼聰明。你知道哪些工具能很好地處理這種情況?我在柱狀數據中遇到很多提示問題的空間。我希望AWK允許像cut -c這樣的列範圍規範。 – mnestic